10分钟学会 Lua 编程
Lua是个超级轻量的编程语言,专门用来嵌入到其他程序里面用。很多游戏比如《魔兽世界》、Roblox都在用Lua,还有很多软件也拿它来做配置脚本。
1. 编写第一个 Lua 程序
从最简单的开始。新建一个叫hello.lua
的文件,里面写:
print("Hello, World!")
保存之后,在命令行里运行:
lua hello.lua
你就会看到:
Hello, World!
就这么简单!print()
就是用来在屏幕上显示文字的。
2. 基本语法规则
Lua 的语法比较简单:
-- 这是单行注释,就像聊天时候的备注
print("你好世界!")
--[[
这是多行注释
想写多少行都行
]]
记住这几个要点:
- 注释:单行用
--
,多行用--[[ ]]
- 语句:一行写一个命令,不用加分号
- 大小写:Lua分大小写,
name
和Name
是两码事 - 空格:空格和换行随便用,不影响代码
3. 变量和数据类型
在 Lua 里面不用事先告诉它变量是什么类型:
-- 直接赋值就行
名字 = "Lua"
年龄 = 25
很牛逼 = true
圆周率 = 3.14159
-- 还能一次性赋多个值
x, y, z = 10, 20, 30
-- 空值用nil表示
空变量 = nil
print("名字:", 名字)
print("年龄:", 年龄)
print("牛逼不:", 很牛逼)
Lua有这些数据类型:
- nil:啥也没有
- boolean:就是true或false
- number:数字,不分整数小数
- string:字符串,就是文字
- table:这是Lua的大杀器,什么数组、字典都能装
- function:函数,一等公民
- userdata:给C语言用的
- thread:协程,高级玩法
4. 字符串操作
-- 字符串几种写法
str1 = "你好"
str2 = '世界'
str3 = [[多行
字符串真方便]]
-- 字符串拼接用..
问候语 = str1 .. " " .. str2
print(问候语) -- 输出: 你好 世界
-- 字符串长度用#
长度 = #"你好"
print(长度) -- 输出: 2
-- 字符串方法
文本 = "hello world"
大写 = 文本:upper()
小写 = 文本:lower()
截取 = 文本:sub(1, 5)
print(大写) -- 输出: HELLO WORLD
print(截取) -- 输出: hello
5. 表(Table)- Lua的万能容器
表是 Lua 最牛逼的东西,什么都能装,简称装逼!!!:
-- 当数组用(注意从1开始数)
水果 = {"苹果", "香蕉", "樱桃"}
print(水果[1]) -- 输出: 苹果
print(水果[2]) -- 输出: 香蕉
-- 当字典用
人物 = {
名字 = "小明",
年龄 = 30,
城市 = "北京"
}
print(人物.名字) -- 输出: 小明
print(人物["年龄"]) -- 输出: 30
-- 混合着用也没问题
混合表 = {
"苹果",
"香蕉",
颜色 = "红色",
数量 = 5
}
-- 表操作
水果 = {"苹果", "香蕉"}
table.insert(水果, "樱桃") -- 往最后加
table.insert(水果, 2, "橙子") -- 插到第二个位置
print(table.concat(水果, ", ")) -- 输出: 苹果, 橙子, 香蕉, 樱桃
6. 流程控制
-- if语句
年龄 = 18
if 年龄 >= 18 then
print("成年人了")
elseif 年龄 >= 13 then
print("青少年")
else
print("小朋友")
end
-- while循环
计数器 = 1
while 计数器 <= 5 do
print("计数:", 计数器)
计数器 = 计数器 + 1
end
-- for循环(数字的)
for i = 1, 5 do
print("数字:", i)
end
-- for循环(带步长)
for i = 10, 1, -2 do
print("倒着数:", i)
end
-- for循环(遍历表)
水果 = {"苹果", "香蕉", "樱桃"}
for 序号, 水果名 in ipairs(水果) do
print(序号, 水果名)
end
人物 = {名字 = "小明", 年龄 = 30}
for 键, 值 in pairs(人物) do
print(键, 值)
end
7. 函数
-- 基本函数
function 打招呼(名字)
return "你好, " .. 名字 .. "!"
end
消息 = 打招呼("小红")
print(消息) -- 输出: 你好, 小红!
-- 函数能返回多个值
function 计算(a, b)
return a + b, a - b, a * b, a / b
end
和, 差, 积, 商 = 计算(10, 5)
print("和:", 和) -- 输出: 和: 15
print("差:", 差) -- 输出: 差: 5
-- 匿名函数(也叫lambda)
乘 = function(x, y)
return x * y
end
结果 = 乘(4, 5)
print(结果) -- 输出: 20
-- 函数当参数传
function 执行操作(x, y, 操作)
return 操作(x, y)
end
结果 = 执行操作(6, 7, 乘)
print(结果) -- 输出: 42
8. 模块化
把代码分开写更清爽。先建个数学工具.lua
:
-- 数学工具.lua
local 数学工具 = {}
function 数学工具.加(a, b)
return a + b
end
function 数学工具.乘(a, b)
return a * b
end
return 数学工具
然后在主文件里用:
-- 主程序.lua
local 数学工具 = require("数学工具")
结果 = 数学工具.加(10, 5)
print("加法结果:", 结果) -- 输出: 加法结果: 15
结果 = 数学工具.乘(4, 6)
print("乘法结果:", 结果) -- 输出: 乘法结果: 24
9. 错误处理
-- 用pcall抓错误
function 危险操作()
error("完犊子了!")
end
-- pcall能保护调用
成功, 结果 = pcall(危险操作)
if 成功 then
print("搞定了:", 结果)
else
print("翻车了:", 结果)
end
-- 自己抛错误
function 除(a, b)
if b == 0 then
error("别除以零啊兄弟")
end
return a / b
end
成功, 结果 = pcall(除, 10, 0)
if not 成功 then
print("出错啦:", 结果)
end
10. 实战例子
-- 简易计算器
function 计算器()
print("🐮 简易计算器")
print("1. 加")
print("2. 减")
print("3. 乘")
print("4. 除")
选择 = tonumber(io.read())
print("输第一个数:")
数1 = tonumber(io.read())
print("输第二个数:")
数2 = tonumber(io.read())
if 选择 == 1 then
结果 = 数1 + 数2
print("结果:", 结果)
elseif 选择 == 2 then
结果 = 数1 - 数2
print("结果:", 结果)
elseif 选择 == 3 then
结果 = 数1 * 数2
print("结果:", 结果)
elseif 选择 == 4 then
if 数2 ~= 0 then
结果 = 数1 / 数2
print("结果:", 结果)
else
print("❌ 别除以零")
end
else
print("🤔 选错了")
end
end
-- 想用就取消注释
-- 计算器()
-- 文件操作
function 读文件(文件名)
local 文件 = io.open(文件名, "r")
if not 文件 then
return nil, "打不开文件"
end
local 内容 = 文件:read("*a")
文件:close()
return 内容
end
内容, 错误 = 读文件("例子.txt")
if 内容 then
print("文件内容:", 内容)
else
print("出错:", 错误)
end
总结
Lua这语言真心好用!特别适合:
- 🎮 做游戏脚本(很多游戏都用它)
- 🔧 嵌入式开发(因为特别轻量)
- ⚙️ 配置文件和自动化脚本
- 🚀 需要高性能的场景(配合LuaJIT)
Lua的牛逼之处:
- 轻如鸿毛:占用空间超级小
- 快如闪电:LuaJIT编译后飞快
- 随心所欲:动态类型+万能table
- 到处能跑:从手机到服务器都能用
- 好嵌入:和C/C++配合默契
想继续深入?可以玩玩:
- Lua的标准库函数
- 协程(做并发编程)
- 元表和元方法(实现面向对象)
- Lua和C的交互
- Love2D游戏框架
Lua上手快,功能强,赶紧用起来吧!🚀